#include "micropython/py/dynruntime.h"
#include "qlibc/qlib.c"

CSDK_INIT_GLOBALS

static obj factorial() {
    GenericAPI_Print(string("Hello, world!"));
    obj inp = GenericAPI_Input("Enter somethening: ");
    obj lst = empty_list();

    

    for (int i = 0; i != mp_obj_get_int(GenericAPI_Len(inp)); i++) {
        ListAPI_Append(lst, StringAPI_GetChar(inp, mp_obj_new_int(i)));
    }

    return lst;
}



mp_obj_t mpy_init(mp_obj_fun_bc_t *self, size_t n_args, size_t n_kw, mp_obj_t *args) {
    MP_DYNRUNTIME_INIT_ENTRY
    CSDK_EXPORT_GLOBALS
    
    // mp_store_global(MP_QSTR_regSA_CS, MP_OBJ_FROM_PTR(&O_SA_CS)); mp_store_global(MP_QSTR_regSA_GC, MP_OBJ_FROM_PTR(&O_SA_GC)); mp_store_global(MP_QSTR_regSA_SC, MP_OBJ_FROM_PTR(&O_SA_SC)); mp_store_global(MP_QSTR_regSA_GL, MP_OBJ_FROM_PTR(&O_SA_GL)); mp_store_global(MP_QSTR_regSA_Cn, MP_OBJ_FROM_PTR(&O_SA_Cn)); mp_store_global(MP_QSTR_regSA_Sl, MP_OBJ_FROM_PTR(&O_SA_Sl)); mp_store_global(MP_QSTR_regSA_Ct, MP_OBJ_FROM_PTR(&O_SA_Ct)); mp_store_global(MP_QSTR_regSA_Sw, MP_OBJ_FROM_PTR(&O_SA_Sw)); mp_store_global(MP_QSTR_regLA_CL, MP_OBJ_FROM_PTR(&O_LA_CL)); mp_store_global(MP_QSTR_regLA_GI, MP_OBJ_FROM_PTR(&O_LA_GI)); mp_store_global(MP_QSTR_regLA_SI, MP_OBJ_FROM_PTR(&O_LA_SI)); mp_store_global(MP_QSTR_regLA_GLe, MP_OBJ_FROM_PTR(&O_LA_GLe)); mp_store_global(MP_QSTR_regLA_Ap, MP_OBJ_FROM_PTR(&O_LA_Ap)); mp_store_global(MP_QSTR_regLA_In, MP_OBJ_FROM_PTR(&O_LA_In)); mp_store_global(MP_QSTR_regLA_Rm, MP_OBJ_FROM_PTR(&O_LA_Rm)); mp_store_global(MP_QSTR_regLA_Po, MP_OBJ_FROM_PTR(&O_LA_Po)); mp_store_global(MP_QSTR_regLA_Ex, MP_OBJ_FROM_PTR(&O_LA_Ex)); mp_store_global(MP_QSTR_regLA_Cr, MP_OBJ_FROM_PTR(&O_LA_Cr)); mp_store_global(MP_QSTR_regDA_CD, MP_OBJ_FROM_PTR(&O_DA_CD)); mp_store_global(MP_QSTR_regDA_GVe, MP_OBJ_FROM_PTR(&O_DA_GVe)); mp_store_global(MP_QSTR_regDA_RK, MP_OBJ_FROM_PTR(&O_DA_RK)); mp_store_global(MP_QSTR_regDA_GK, MP_OBJ_FROM_PTR(&O_DA_GK)); mp_store_global(MP_QSTR_regDA_SV, MP_OBJ_FROM_PTR(&O_DA_SV)); mp_store_global(MP_QSTR_regDA_GVs, MP_OBJ_FROM_PTR(&O_DA_GVs));
    static MP_DEFINE_CONST_FUN_OBJ_1(factorial_obj, factorial); mp_store_global(MP_QSTR_factorial, MP_OBJ_FROM_PTR(&factorial_obj));

    MP_DYNRUNTIME_INIT_EXIT
}
